// 再度Miren
// 2622011721@qq.com
//初始所有内容
//导入config模块  配置信息 读取环境变量
const config = require('config')
console.log(config.get('app').host);
const api = config.get('app').host
//添加日志模块
const log4js = require('../Puppeteer/log/log4js.config');
const logger = log4js.getLogger("首次★强更专线");
//
const sql = require('../PutArticle/model/MySQL');
const createPage = require('../Puppeteer/Puppeteer');
const GPup_load_Image = require('./GPup_load_Image');//上传图片接口
const randomDelay = Math.floor(Math.random() * 3000) + 1000;//随机时间
// logger.info(`方法执行完毕，URL: ${URL}`)
async function GoogelPlay_hom(URL) {
  // 定义要保存的数据
  dataArr = {
    game_name: '',
    star_rating: '',
    download_count: '',
    age_limit: '',
    game_icon: '',
    game_detail_images: JSON.stringify(['image1_url', 'image2_url']),
    description: 'Sample game description...',
    version: '1.0.1.2',
    update_date: '2023-07-30T00:00:00.000Z',
    android_version_required: '5.0 and up',
    interactive_elements: 'Users interact',
    release_date: null,
    developer: null,
    file_size: null,
    tags: JSON.stringify(['tag1', 'tag2']),
    class_name: 'tw.sonet.princessconnect',
    update_content: 'What\'s new in this version...',
    download: JSON.stringify([
      { method: 'Method 1', link: 'Link 1' },
      { method: 'Method 2', link: 'Link 2' }
    ])  // 添加 Download 字段
  };
  //console.log('GoogelPlay_hom 方法正在执行...' + URL);
  const { globalBrowser, page } = await createPage();
  try {
    await page.goto(URL, { timeout: 0 });
    if (true) {
      //console.log('有弹窗登录框');
      const result = await processPageData(page);
      //console.log(result);
      return Promise.resolve(result);
    }
  } catch (error) {
    console.error('爬取失败:', error);
  } finally {
    //console.log('正在爬取 GoogelPlay 游戏内容...');
    await page.close();
    //console.log('关闭页面完成！');
    const pages = await globalBrowser.pages();
    //console.log('当前浏览器标签页数量：' + pages.length);
  }
}


async function processPageData(page) {
  // 从当前浏览器地址中截取ID后面的部分作为文件
  const url = page.url();
  console.log('当前 URL 是：' + url);
  const id = url.match(/\?id=(.*)/)[1];
  dataArr.class_name = id;
  // 获取游戏详情
  async function str() {
    try {

      await page.waitForTimeout(randomDelay);
      const elements = await page.$$('h2.XfZNbf');
      for (const element of elements) {
        const text = await element.evaluate(node => node.textContent);
        if (text === '游戏简介' || text === '關於本遊戲' || text === '遊戲簡介' || text === '关于此应用' || text === '關於此應用程式') {
          const parentElement = await element.evaluateHandle(node => node.parentElement);
          const divSibling = await parentElement.evaluateHandle(node => node.nextElementSibling);
          const divText = await divSibling.evaluate(node => node.textContent);
          //console.log(divText);
          await divSibling.click(); // 点击元素
          await Promise.all([
            a()
          ]);

        } else {
          // console.log('正在查找...');
        }
      }

      async function a() {
        // 使用 page.evaluate 来获取匹配属性的 div 元素
        const divElement = await page.evaluate(() => {
          const divs = document.querySelectorAll('div[jsname="rZHESd"]');
          return divs.length > 0 ? divs[0].outerHTML : null;
        });
        // console.log(divElement);
        if (!divElement) {
          console.log('未找到匹配的 div 元素');
          logger.info('未找到匹配的 div 元素')
        }

        async function game_icon() {
          const game_icon = await page.evaluate(() => {
            // 在 evaluate 方法中进行 DOM 查询，返回目标元素的 src 属性值
            let imgElement = document.querySelector('.qxNhq img.T75of');

            if (!imgElement) {
              imgElement = document.querySelector('.dzkqwc img.T75of');
            } else if (!imgElement) {
              imgElement = document.querySelector('.hnnXjf img.T75of');
            }


            return imgElement ? imgElement.getAttribute('src') : null;
          });
          console.log('游戏图标:', game_icon);

          if (!game_icon) {
            console.log('未找到游戏图标');
            
          }
          dataArr.game_icon = game_icon;
          return game_icon
        }

        async function game_name() {
          const game_name = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (!div) {
              console.log('未找到游戏名')
            }
            const cons = div.querySelector('h5.xzVNx');
            return cons ? cons.textContent : null;
          });
          //console.log('游戏名字:', game_name);
          logger.info(`游戏名: ${game_name}-${dataArr.class_name}`)
          dataArr.game_name = game_name;
        }

        async function paragraphTexts() {
          const paragraphTexts = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const cons = div.querySelector('div.fysCi');
              if (cons) {
                const firstInnerDiv = cons.querySelector('div'); // 获取第一个 div 元素
                return firstInnerDiv ? firstInnerDiv.innerHTML : null;
              }
            } else {
              //console.log('meiyou1')
            }
          });
          //console.log('游戏简介:', paragraphTexts);
          dataArr.update_content = paragraphTexts;
        }
        await paragraphTexts()

        async function game_version() {
          const version = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const cons = div.querySelector('div.reAt0');

              return cons ? cons.innerHTML : null;

            } else {
              //console.log('meiyou1')
            }
          });
          //console.log('版本号:', version);
          dataArr.version = version;
        }
        await game_version()

        async function game_update_date() {

          const update_date = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
              if (reAt0Elements.length >= 2) { // 检查是否至少有两个匹配的元素
                return reAt0Elements[1].textContent; // 获取第二个匹配元素的文本内容
              }
            } else {
              //console.log('meiyou1')
            }
            return null; // 如果没有找到匹配的元素或不足两个匹配元素，返回null
          });
          //console.log('更新日期:', update_date);
          const inputDateString = update_date
          // 使用正则表达式提取年、月、日
          const match = inputDateString.match(/(\d{4})年(\d{1,2})月(\d{1,2})日/);

          if (match) {
            const year = parseInt(match[1], 10);
            const month = parseInt(match[2], 10);
            const day = parseInt(match[3], 10);

            // 创建一个新的Date对象，注意月份要减1
            const outputDate = new Date(year, month - 1, day);

            // 格式化为ISO日期字符串
            const outputDateString = outputDate.toISOString();
            //console.log(outputDateString);
            dataArr.update_date = outputDateString;
          } else {
            //console.log('无法解析日期字符串。');
          }

        }
        await game_update_date()

        async function game_android_version_required() {
          const android_version_required = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
              if (reAt0Elements.length >= 2) { // 检查是否至少有两个匹配的元素
                return reAt0Elements[2].textContent; // 获取第二个匹配元素的文本内容
              }
            } else {
              //console.log('meiyou1')
            }
            return null; // 如果没有找到匹配的元素或不足两个匹配元素，返回null
          });
          //console.log('Android 系统版本要求:', android_version_required);
          dataArr.android_version_required = android_version_required;
        }
        await game_android_version_required()

        async function download_count() {
          const download_count = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
              if (reAt0Elements.length >= 2) { // 检查是否至少有两个匹配的元素
                return reAt0Elements[3].textContent; // 获取第二个匹配元素的文本内容
              }
            } else {
              //console.log('meiyou1')
            }
            return null; // 如果没有找到匹配的元素或不足两个匹配元素，返回null
          });
          //console.log('下载次数：', download_count);
          dataArr.download_count = download_count.replace(/次下载/g, '');
        }
        await download_count()

        async function description() {
          const description = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
              if (reAt0Elements.length >= 2) { // 检查是否至少有两个匹配的元素
                return reAt0Elements[4].textContent; // 获取第二个匹配元素的文本内容
              }
            } else {
              //console.log('meiyou1')
            }
            return null; // 如果没有找到匹配的元素或不足两个匹配元素，返回null
          });
          //console.log('应用内购商品', description);
          dataArr.description = description;
        }
        await description()
        async function age_limit() {
          try {
            const age_limit = await page.evaluate(() => {
              const element = document.querySelector('span[itemprop="contentRating"] > span');
              if (element) {
                return element.textContent.trim(); // 获取元素的文本内容并去除首尾空白
              } else {
                return null; // 如果找不到元素，则返回 null
              }
            });
            dataArr.age_limit = age_limit
          } catch (error) {
            console.error('在 age_limit 函数中发生错误:', error);
            return null; // 如果发生错误，返回 null
          }
        }
        await age_limit()

        async function interactive_elements() {
          const interactive_elements = await page.evaluate(() => {
              const div = document.querySelector('div[jsname="rZHESd"]');
              if (div) {
                  const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
                  if (reAt0Elements.length >= 7) { // 检查是否至少有七个匹配的元素
                      return reAt0Elements[6].textContent; // 获取第七个匹配元素的文本内容
                  }
              } else {
                  //console.log('meiyou1')
              }
              return null; // 如果没有找到匹配的元素或不足七个匹配元素，返回null
          });
          //console.log('互动元素：', interactive_elements);
          dataArr.interactive_elements = interactive_elements;
      }
      
      await interactive_elements();

        async function release_date() {
          const release_date = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
              if (reAt0Elements.length >= 2) { // 检查是否至少有两个匹配的元素
                if (reAt0Elements[8]) {
                  return reAt0Elements[8].textContent; // 获取第二个匹配元素的文本内容
                } else {
                  return null
                }

              }
            } else {
              //console.log('meiyou1')
            }
            return null; // 如果没有找到匹配的元素或不足两个匹配元素，返回null
          });
          //console.log('发布日期', release_date);
          dataArr.release_date = release_date;
        }
        await release_date()
        async function developer() {
          const developer = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
              if (reAt0Elements.length >= 2) { // 检查是否至少有两个匹配的元素
                if (reAt0Elements[9]) {
                  return reAt0Elements[9].textContent; // 获取第二个匹配元素的文本内容
                } else {
                  return null
                }

              }
            } else {
              //console.log('meiyou1')
            }
            return null; // 如果没有找到匹配的元素或不足两个匹配元素，返回null
          });
          //console.log('开发厂商', developer);
          dataArr.developer = developer;
        }
        await developer()

        async function game_size() {
          const file_size = await page.evaluate(() => {
            const div = document.querySelector('div[jsname="rZHESd"]');
            if (div) {
              const reAt0Elements = div.querySelectorAll('div.reAt0'); // 获取所有匹配的reAt0元素
              if (reAt0Elements.length >= 2) { // 检查是否至少有两个匹配的元素
                if (reAt0Elements[11]) {
                  return reAt0Elements[11].textContent; // 获取第二个匹配元素的文本内容
                }

              }
            } else {
              //console.log('meiyou1')
            }
            return null; // 如果没有找到匹配的元素或不足两个匹配元素，返回null
          });
          //console.log('下载大小：', file_size);
          dataArr.file_size = file_size;
        }
        await game_size()

        await Promise.all([
          game_icon(),
          game_name()
        ]);

      }

      //console.log('自运行函数执行完毕');
    } catch (error) {
      console.error('发生错误:', error);
    }
  };
  //获取五图
  async function game_imageUrls() {
    const imageUrls = await page.evaluate(() => {
      const divs = document.querySelectorAll('.UbmABe img');
      const urls = Array.from(divs).map(img => img.src).slice(0, 6);
      return urls;
    });
    dataArr.game_detail_images = imageUrls;
  }
  // await game_imageUrls()
  // 获取游戏标签
  async function tagsList() {
    // 使用 page.evaluate 在页面上下文中执行操作
    const spanTexts = await page.evaluate(() => {
      const divElements = document.querySelectorAll('.Uc6QCc'); // 获取所有指定 class 的 div 元素
      const spanTextsArray = [];

      divElements.forEach(divElement => {
        const spanElements = divElement.querySelectorAll('span'); // 获取每个 div 元素下的所有 span 元素
        spanElements.forEach(spanElement => {
          const text = spanElement.textContent.trim(); // 获取每个 span 元素的文本并去除首尾空格
          spanTextsArray.push(text);
        });
      });

      return spanTextsArray;
    });

    // //console.log(spanTexts); // 打印 span 元素的文本数组
    dataArr.tags = spanTexts;
  }
  // 获取游戏星级
  async function starRating() {
    // 使用 page.evaluate 在页面上下文中执行操作
    const divText = await page.evaluate(() => {
      const divElement = document.querySelector('.TT9eCd'); // 获取具有指定 class 的 div 元素
      return divElement ? divElement.textContent.trim() : null;
    });

    if (divText) {
      const starRating = divText.match(/\d+\.\d+/);
      if (starRating) {
        // //console.log('提取的星级评分:', starRating[0]);
        dataArr.star_rating = starRating[0]
      }
    } else {
      //console.log('未找到具有 class "TT9eCd" 的 div 元素。');
    }
  }

  await Promise.all([
    // 等待异步操作完成
    str(),
    tagsList(),
    starRating(),
    game_imageUrls()
    // ...
  ]);

  for (const key in dataArr) {
    if (dataArr[key] === null || dataArr[key] === undefined) {
      dataArr[key] = null;
    }
  }

  console.log(dataArr.game_icon);
  const img = await GPup_load_Image(dataArr.game_icon)
  console.log('游戏图标:', img);
  dataArr.game_icon = img
  dataArr.game_detail_images = await GPup_load_Image(dataArr.game_detail_images)
  console.log('游戏五图:', dataArr.game_detail_images);
  // console.log(dataArr);

  // await sql.GoogelPlay(dataArr);
  const result = await sql.GoogelPlay(dataArr);

  console.log(result);
  return Promise.resolve(result);
  // return '完成';
}



// GoogelPlay_hom('https://play.google.com/store/apps/details?id=jp.furyu.marron')

module.exports = GoogelPlay_hom;
